Code 属性
Java
程序方法体里的代码经过Javac
编译器处理之后,最终变成字节码指令存储在Code
属性内。
Code
属性出现在方法表的属性集合之中,并非所有的方法表都必须存在这个属性,譬如接口或抽象类。
细节
max_stack
:代表操作数栈(Operand Stack
)深度的最大值。在方法执行的任意时刻,操作数栈都不会超过这个深度。虚拟机运行的时候需要根据这个值来分配栈桢(Stack Frame
)中的操作栈深度。max_locals
:代表了局部变量表所需的存储空间,单位是变量槽。实例方法会有隐藏参数this
。需要注意并不是方法使用多少局部变量就分配多少变量槽,当变量超出其作用域之后,变量占用的变量槽可以被其他变量重用。code_length
:是一个u4
类型的长度值,理论上最大值可以达到2的32次幂,但《Java虚拟机规范》中明确限制了一个方法不允许超过65535条字节码指令,实际上只使用了u2
的长度。code
:代表字节码指令,注意到是u1
类型,最多可以表达256(0~255)条指令。